package com.dd.stack.mybatisplus.service.inner;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.stack.mybatisplus.pojo.DO.DataObjectDO;

import java.util.List;

/**
 * @Author liuxianmeng
 * @CreateTime 2025/5/13 23:32
 * @Description 批量插入处理

    推荐使用 saveBatch 的情况
      - 数据量不大(万条以下)
      - 对性能要求不极致的场景
      - 需要快速实现功能的场景
      - 不确定底层数据库类型的项目(兼容性更好)

    推荐使用自定义批量插入的情况
      - 大数据量插入(万条以上)
      - 对性能要求极高的场景
      - MySQL 数据库(配合 rewriteBatchedStatements=true)
      - 可以控制SQL生成大小的环境

 */
public interface DataObjectBatchService extends IService<DataObjectDO> {

    /**
     * 批量保存数据对象（使用MyBatis-Plus默认实现）
     * <p>
     * 默认每1000条数据作为一批执行
     *
     * @param list 待保存的数据对象列表
     * @return 是否保存成功
     */
    boolean saveBatch(List<DataObjectDO> list);

    /**
     * 批量保存数据对象（使用MyBatis-Plus默认实现 可指定批次大小）
     *
     * @param list 待保存的数据对象列表
     * @param batchSize 每批次处理的数据量
     * @return 是否保存成功
     */
    boolean saveBatch(List<DataObjectDO> list, int batchSize);

    /**
     * 批量保存数据对象（自定义实现）
     * <p>
     * 使用XML中定义的批量插入SQL，性能更优
     * 自动处理大数据量分片插入
     *
     * @param list 待保存的数据对象列表
     * @return 是否保存成功
     */
    boolean saveBatchByCustom(List<DataObjectDO> list);
}
